/**
 * 
 */
package gov.pr.celepar.sentinela.log.facade;

import gov.pr.celepar.framework.util.Data;
import gov.pr.celepar.sentinela.admin.dao.SistemaDAO;
import gov.pr.celepar.sentinela.admin.dao.UsuarioDAO;
import gov.pr.celepar.sentinela.admin.dao.factory.DAOFactoryServer;
import gov.pr.celepar.sentinela.admin.pojo.Sistema;
import gov.pr.celepar.sentinela.log.dao.LogDAO;
import gov.pr.celepar.sentinela.log.dao.factory.DAOFactoryLog;
import gov.pr.celepar.sentinela.log.pojo.RegistroLogUsuario;
import gov.pr.celepar.sentinela.log.pojo.Usuario;

import java.util.Collection;

import java.util.Vector;

import org.apache.commons.lang.StringUtils;


/**
 * @author paulodamaso
 *
 */
public class LogFacade {

	public static Collection<RegistroLogUsuario> recuperarLogUsuario (
			String[] usuarios, String[] autores,
			String[] sistemas, String dataInicial, String dataFinal,
			String[] enderecoIp, String interfaceAcesso, String limite, String ordem)
			throws Exception {
		
		Collection<RegistroLogUsuario> retorno = null;
		DAOFactoryServer daoFactory = DAOFactoryServer.getDAOFactory();
		DAOFactoryLog daoFactoryLog = DAOFactoryLog.getDAOFactory();
		UsuarioDAO daoUsuario = daoFactory.getUsuarioDAO();
		SistemaDAO daoSistema = daoFactory.getSistemaDAO();
		LogDAO daoLog = daoFactoryLog.getLogDAO(LogFacade.class);
		

		Collection<Usuario> listaUsuarios = new Vector<Usuario>();
		if (usuarios != null){
			for (int i=0;i<usuarios.length;i++){
				if (StringUtils.isNotBlank(usuarios[i]))
					listaUsuarios.add(daoUsuario.consultarUsuarioLog(Long.parseLong(usuarios[i])));
			}
		}
			
		Collection<Usuario> listaAutores = new Vector<Usuario>();
		if (autores != null){
			for (int i=0;i<autores.length;i++){
				if (StringUtils.isNotBlank(autores[i]))
					listaAutores.add(daoUsuario.consultarUsuarioLog(Long.parseLong(autores[i])));
			}
		}
		
		Collection<Sistema> listaSistemas = new Vector<Sistema>();
		if (sistemas != null ){			
			for (int i=0;i<sistemas.length;i++){
				if (StringUtils.isNotBlank(sistemas[i]))
					listaSistemas.add(daoSistema.consultar(Long.parseLong(sistemas[i])));
			}
		}
		
		String ip = null;
		if (enderecoIp != null){
			ip = "";
			if (StringUtils.isNotBlank(enderecoIp[0]) || StringUtils.isNotBlank(enderecoIp[1]) ||
					StringUtils.isNotBlank(enderecoIp[2]) || StringUtils.isNotBlank(enderecoIp[3])){
				for (int i=0;i<enderecoIp.length; i++){
					if (StringUtils.isBlank(enderecoIp[i])){					
						ip += "%";
					}else{
						ip += enderecoIp[i];
					}
					if (i != enderecoIp.length - 1){
						ip += ".";
					}
				}
				
			}
		}
		
		if (StringUtils.isNotBlank(ordem) && ordem.equalsIgnoreCase("desc")){
			ordem = "desc";
		}else {
			ordem = "asc";
		}
		
		retorno = daoLog.recuperarLogUsuario(listaUsuarios, listaAutores, listaSistemas,
				Data.formataData(dataInicial),Data.formataData(dataFinal), 
				ip, interfaceAcesso, Integer.parseInt(limite), ordem);
			
		return retorno;
		
	}
}
